#!/usr/bin/env python3
"""
数字人视频背景替换系统构建脚本
将Vue前端打包并整合到Python后端
"""

import os
import sys
import subprocess
import shutil
import platform
from pathlib import Path
import json

class ProjectBuilder:
    def __init__(self):
        self.base_dir = Path(__file__).parent
        self.backend_dir = self.base_dir / 'backend'
        self.npm_cmd = 'npm.cmd' if platform.system() == 'Windows' else 'npm'

    def create_production_app(self):
        """创建生产环境的应用文件"""
        print("🔧 准备生产环境应用...")

        # 检查是否已有生产环境的app.py
        self.backend_dir / 'app.py'

        print("✅ 生产环境准备完成")
        return True

    def create_startup_script(self):
        """创建生产环境启动脚本"""
        print("📝 创建启动脚本...")

        # Windows启动脚本
        start_bat = self.backend_dir / 'start.bat'
        with open(start_bat, 'w', encoding='utf-8') as f:
            f.write('''@echo off
chcp 65001 > nul
cd /d "%~dp0"
echo 🚀 启动数字人视频背景替换系统...
echo 🌐 访问地址: http://localhost:5000
echo 🛑 停止服务: Ctrl+C
echo.
python app.py
pause
''')

        # Linux/macOS启动脚本
        start_sh = self.backend_dir / 'start.sh'
        with open(start_sh, 'w', encoding='utf-8') as f:
            f.write('''#!/bin/bash
cd "$(dirname "$0")"
echo "🚀 启动数字人视频背景替换系统..."
echo "🌐 访问地址: http://localhost:5000"
echo "🛑 停止服务: Ctrl+C"
echo
python3 app.py
''')

        # 设置执行权限
        if platform.system() != 'Windows':
            os.chmod(start_sh, 0o755)

        print("✅ 启动脚本创建完成")
        print(f"  Windows: {start_bat}")
        print(f"  Linux/macOS: {start_sh}")
        return True

    def create_requirements(self):
        """创建requirements.txt"""
        print("📋 创建requirements.txt...")

        requirements = """# 数字人视频背景替换系统依赖
flask>=2.0.0
flask-cors>=3.0.0
opencv-python>=4.5.0
numpy>=1.20.0
pillow>=8.0.0
requests>=2.25.0

# 可选依赖（根据实际使用情况）
# gunicorn>=20.0.0  # 生产环境WSGI服务器
# waitress>=2.0.0   # Windows下的WSGI服务器
"""

        req_file = self.backend_dir / 'requirements.txt'
        with open(req_file, 'w', encoding='utf-8') as f:
            f.write(requirements)

        print("✅ requirements.txt创建完成")
        return True

    def create_readme(self):
        """创建部署说明"""
        print("📖 创建部署说明...")

        readme_content = """# 数字人视频背景替换系统 - 生产版本

## 系统要求

- Python 3.7+
- FFmpeg
- 至少2GB内存
- 足够的磁盘空间存储视频文件

## 快速启动

### Windows
双击运行 `start.bat`

### Linux/macOS
```bash
chmod +x start.sh
./start.sh
```

### 手动启动
```bash
cd backend
python app.py
```

## 安装依赖

```bash
cd backend
pip install -r requirements.txt
```

## 访问地址

启动后访问: http://localhost:5000

## 目录结构

```
backend/
├── app.py              # 主应用文件
├── start.bat           # Windows启动脚本  
├── start.sh            # Linux/macOS启动脚本
├── requirements.txt    # Python依赖
├── dist/               # 前端构建文件
├── logs/               # 日志文件
├── uploads/            # 上传文件
├── outputs/            # 输出文件
└── ...
```

## 生产环境部署

### 使用Gunicorn (推荐)
```bash
pip install gunicorn
gunicorn -w 4 -b 0.0.0.0:5000 app:app
```

### 使用Waitress (Windows)
```bash
pip install waitress
waitress-serve --host=0.0.0.0 --port=5000 app:app
```

## 常见问题

1. **端口被占用**
   - 修改app.py中的端口号
   
2. **FFmpeg未安装**
   - Windows: 下载FFmpeg并添加到PATH
   - Linux: `sudo apt install ffmpeg`
   - macOS: `brew install ffmpeg`

3. **权限问题**
   - 确保uploads、outputs等目录有写权限

## 注意事项

- 确保防火墙允许5000端口访问
- 生产环境建议使用反向代理(nginx)
- 定期清理临时文件和日志
"""

        readme_file = self.backend_dir / 'README.md'
        with open(readme_file, 'w', encoding='utf-8') as f:
            f.write(readme_content)

        print("✅ README.md创建完成")
        return True

    def show_build_summary(self):
        """显示构建摘要"""
        print("\n" + "=" * 60)
        print("🎉 项目构建完成!")
        print("=" * 60)
        print("📦 构建产物:")
        print(f"  ✅ 后端应用: {self.backend_dir / 'app.py'}")
        print(f"  ✅ 启动脚本: {self.backend_dir / 'start.bat'} | {self.backend_dir / 'start.sh'}")
        print(f"  ✅ 依赖文件: {self.backend_dir / 'requirements.txt'}")
        print(f"  ✅ 说明文档: {self.backend_dir / 'README.md'}")
        print("\n🚀 启动方式:")
        print("  Windows: 双击 backend/start.bat")
        print("  Linux/macOS: cd backend && ./start.sh")
        print("  手动: cd backend && python app.py")
        print("\n🌐 访问地址: http://localhost:5001")
        print("=" * 60)

    def build(self):
        """执行完整构建流程"""
        print("🏗️  开始构建数字人视频背景替换系统...")
        print("=" * 60)

        # 准备生产环境
        if not self.create_production_app():
            return False

        # 创建启动脚本
        if not self.create_startup_script():
            return False

        # 创建依赖文件
        if not self.create_requirements():
            return False

        # 创建说明文档
        if not self.create_readme():
            return False

        # 显示构建摘要
        self.show_build_summary()

        return True

def main():
    """主函数"""
    builder = ProjectBuilder()

    try:
        success = builder.build()
        if not success:
            print("❌ 构建失败")
            sys.exit(1)
    except KeyboardInterrupt:
        print("\n🛑 构建被中断")
        sys.exit(1)
    except Exception as e:
        print(f"❌ 构建异常: {e}")
        import traceback
        traceback.print_exc()
        sys.exit(1)

if __name__ == '__main__':
    main()  